package com.yugao.fintech.antelope.system.service;

import com.yugao.fintech.antelope.system.model.rqrs.ram.ResourcePermResp;
import com.yugao.fintech.antelope.system.model.rqrs.ram.ResourcePermSaveReq;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 授权管理
 *
 * 提供用户-角色、角色-菜单、角色-部门的授权处理
 *

 */
public interface AuthorizeService {
    /**
     * 获取角色权限(忽略租户)
     * @param roleIds 角色id
     * @return key: 模块名, key: 可访问的资源路径集合
     */
    Map<String, List<String>> listAssignRoleUrl(List<Long> roleIds);

    /**
     * 获取api资源
     * @param roleId 角色id
     */
    List<ResourcePermResp> listApiResource(Long roleId);

    /**
     * 保存接口资源
     */
    void saveApiResource(ResourcePermSaveReq req);

    /**
     * 为角色分配菜单
     * @param roleId 角色id
     * @param mendIds 菜单集合
     */
    void assignRoleMenu(Long roleId, Set<Long> mendIds);

    /**
     * 为用户分配角色
     * @param userId 用户id
     * @param roleIds 角色id集合
     */
    void assignUserRole(Long userId, List<Long> roleIds);

    /**
     * 为用户分配一个部门
     * @param userId 用户id
     * @param deptIds 部门ids
     */
    void assignUserDept(Long userId, List<Long> deptIds);

    /**
     * 删除租户下的全部角色
     */
    void deleteTenantAllRole();

    /**
     * 删除租户下的全部部门
     */
    void deleteTenantAllDept();

    /**
     * 获取角色的菜单id集合
     * @param roleId 角色id
     * @return 菜单ids
     */
    Set<Long> listRoleMenuId(Long roleId);

    /**
     * 删除用户部门
     * @param userIds 用户ids
     */
    void deleteUserDept(List<Long> userIds);

    /**
     * 删除用户角色
     * @param userIds 用户ids
     */
    void deleteUserRole(List<Long> userIds);

    /**
     * 获取用户所有的操作权限
     */
    Set<String> listActionByUserId(Long userId);
}
